/*
 * @Author: egg1bro
 * @Date: 2023-01-03 11:22:12
 * @LastEditTime: 2023-02-21 12:34:01
 * @LastEditors: egg1bro
 * @Description: 
 * @FilePath: \team-design-backend\controller\login.js
 * 可以输入预定的版权声明、个性签名、空行等
 */
// 引入连接池
const db = require('../db')
// 阿里短信
const Core = require('@alicloud/pop-core');

// 引入token
const auth = require('./auth')
// 验证码默认值
let smsCode = null

// 登录
const login = (req, res) => {
    // 执行登录的操作
    // 获取用户名和密码
    const phone = req.body.username
    const password = req.body.password
    console.log(req.body);
    if (phone && password) {

        // 校验用户名和密码
        db.query('SELECT * FROM users WHERE user_phone = ?', [phone], (err, results) => {
            // 如果出错
            if (err) {
                return res.status(500).json({
                    code: 500,
                    msg: '服务器出错误，请联系管理员',
                    data: null
                })
            }
            console.log(results, 'results');
            // 判断有没有该用户
            if (results.length > 0) {
                // 有该用户
                if (results[0].user_password === password) {
                    token = auth.generateToken({ user_id: results[0].user_id })
                    // 登录成功
                    res.status(200).json({
                        code: 200,
                        msg: '登录成功',
                        data: token
                    })
                } else {
                    // 密码不正确，登录失败
                    res.status(200).json({
                        code: 404,
                        msg: '密码不正确，登录失败',
                        data: null
                    })
                }
            } else {
                // 没有查到用户名
                res.status(200).json({
                    code: 404,
                    msg: '您登录的用户不存在',
                    data: null
                })
            }
        })
    } else {
        res.status(200).json({
            code: 404,
            msg: '请输入用户名或密码',
            data: null
        })
    }
}

// 注册
const register = (req, res) => {
    const phone = req.body.user_phone
    const password = req.body.password
    const  sms = req.body.sms
    console.log(req.body.sms);

    if (phone && password) {
        //校验用户名和密码
        db.query('select * from users where user_phone=?', [phone], (err, results) => {
            if (results.length > 0) {  // 有该用户名
                // console.log('用户名重复，请重新注册');
                res.status(200).json({
                    code: 404,
                    msg: '该手机号已经注册!',
                    data: null
                })
            } else { //没有该用户名，可以注册
                // 如果验证码存在的话
                if (sms) {
                        // 如果验证码正确的话
                    if (smsCode == sms) {
                        db.query('insert into users (user_phone,user_password) values(?,?)', [phone, password], (err, results) => {
                            if (err) {
                                res.status(200).json({
                                    code: 404,
                                    msg: '注册失败，数据库错误',
                                    data: err
                                })
                            } else {
                                res.status(200).json({
                                    code: 200,
                                    msg: '注册成功',
                                    data: null
                                })
                            }
                        })
                    } else {
                        res.status(200).json({
                            code: 404,
                            msg: '验证码错误',
                            data: null
                        })
                    } 
                } else {
                    res.status(200).json({
                        code: 404,
                        msg: '请输入验证码',
                        data: null
                    })
                }
                   
            }
        })
    } else {
        res.status(200).json({
            code: 404,
            msg: '用户和密码不能为空',
            data: null
        })
    }

}

// 注册成功后填写姓名
const addName = (req, res) => {
    const phone = req.body.user_phone
    const name = req.body.user_name

    console.log(req.body);
    if (name) {
        db.query('UPDATE `users` SET `user_name`= ? WHERE `user_phone`= ?', [name, phone], (err, results) => {
            if (err) {
                return res.status(200).json({
                    code: 404,
                    msg: '服务器出错',
                    data: null
                })
            } else {
                res.status(200).json({
                    code: 200,
                    msg: '输入用户名成功',
                    data: null
                })
            }
        })
    } else {
        res.status(200).json({
            code: 404,
            msg: '姓名不能为空',
            data: null
        })
    }



}

// 调用阿里云短信验证功能
const getSms = (req, res) => {
    const phone = req.query.phone
    smsCode = Math.floor(Math.random() * 900000) + 100000;
    console.log(smsCode, '发sms');
    if (phone) {
        var client = new Core({
            accessKeyId: 'LTAI5t6QWxyoNAm9qY1U9D9h',
            accessKeySecret: 'E36W2GDrX06dO1BNqB1H0HlHSUAdK3',
            // securityToken: '<your-sts-token>', // use STS Token
            endpoint: 'https://dysmsapi.aliyuncs.com',
            apiVersion: '2017-05-25'
        });

        var params = {
            "SignName": "eggbro提醒您",
            "TemplateCode": "SMS_268240019",
            "PhoneNumbers": phone,
            "TemplateParam": `{"code":'${smsCode}'}`
        }

        var requestOption = {
            method: 'POST',
            formatParams: false,
        };


        client.request('SendSms', params, requestOption).then((result) => {
            if (result.Code == 'OK') {
                return res.status(200).json({
                    code: 200,
                    msg: '发送验证码成功',
                    data: smsCode
                })
            }
        }).catch(err => {
            console.log(err);
            res.status(200).json({
                code: 404,
                msg: '验证码发送失败',
                data: null
            })
        })
    } else {
        res.status(200).json({
            code: 404,
            msg: '请输入手机号',
            data: null
        })
    }
}

// 验证前台返回的验证码去登录
const verifySmsToLogin = (req, res) => {
    const { sms, phone } = req.body

    if (phone) {
        // 校验用户名和密码
        db.query('SELECT * FROM users WHERE user_phone = ?', [phone], (err, results) => {
            // 如果出错
            if (err) {
                return res.status(500).json({
                    code: 500,
                    msg: '服务器出错误，请联系管理员',
                    data: null
                })
            }
            console.log(results, 'results');
            // 判断有没有该用户
            if (results.length > 0) {
                // 有该用户
                if (smsCode = sms) {
                    token = auth.generateToken({ user_id: results[0].user_id })

                    return res.status(200).json({
                        code: 200,
                        msg: '验证码正确',
                        data: token
                    })
                } else {
                    res.status(200).json({
                        code: 404,
                        msg: '验证码错误',
                        data: null
                    })
                }
            } else {
                // 没有查到用户名
                res.status(200).json({
                    code: 404,
                    msg: '您登录的用户不存在',
                    data: null
                })
            }
        })
    } else {
        res.status(200).json({
            code: 404,
            msg: '请输入手机号',
            data: null
        })
    }
}

module.exports = {
    login,
    register,
    addName,
    getSms,
    verifySmsToLogin
}


